Chrome拡張を使って認証器なしでWebAuthnのAPIを呼ぶ
出先でたまたま認証器がない状態で WebAuthn の API を叩きたいというイベントが稀に発生するのですが、WebAuthn.io という WebAuthn のデモサイトで紹介されていた Chrome拡張で認証器をもっていなくても API を叩けることを知ったので紹介させていただきます。
使い方
Virtual Authenticators Tab | chrome ウェブストアからインストールします。
Chrome 80 以上のバージョンが推奨、とのことです。
インストールしてからデベロッパーツールを開くと、Virtual Authenticators というタブが追加されています。
Enable Virtual Authenticator Environment をチェックすると、仮想認証器が有効化します。
有効化すると認証器が接続されている時のように API を呼ぶことができます。
いわゆる認証器をタップするなどのユーザーの存在チェックなどは行われず、特に何もしなくても API のレスポンスが返ってくるようです。
認証器の追加
いまいち仕様が理解しきれていないのですが、この Chrome 拡張には属性を指定した認証器を追加する機能があります。
- プロトコル
- 接続方式
- レジデントキーをサポートするかどうか
- User Verification をサポートするかどうか
上記の属性が指定可能です。
認証器を一つも追加していない状態では、
- プロトコル:ctap2
- 接続方式:usb
- レジデントキーをサポートするかどうか:false
- User Verification をサポートするかどうか:false
としての動作となるようです。ちなみに aaguid は 01020304-0506-0708-0102-030405060708 でした。
ここで、例えば authenticatorSection の userVerification を required にして実行したい場合、Add Authenticator で認証器を追加します。
作成すると一覧に認証器が追加されます。
この状態だと navigator.credentials.get を userVerification="required" で呼び出すことができます。 ただし、ここの挙動がいまいち理解しきれていないのですが、この呼び出しが成功したり失敗したりします。 なんとなくなのですが、デフォルトの認証器と、追加した認証器のどちらかがレスポンスを返していて、デフォルトが選ばれた?場合はエラーになっている気がします。
エラーとなる場合、以下のようなエラーとメッセージが返ってきます。
NotAllowedError
:The operation either timed out or was not allowed. See: https://w3c.github.io/webauthn/#sec-assertion-privacy.
Credentials の一覧からは、生成したクレデンシャルを消したり秘密鍵をダウンロードしたりできます。
まとめ
Virtual Authenticators Tab を利用すると、手元に認証器がなくても WebAuthn の API を呼び出すことが可能です。
私からは以上です。